/**
 * Copyright &copy; 2013-2015 山东易科德软件有限公司 All rights reserved.
 */
package cn.net.ecode.modules.sys.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.net.ecode.common.config.Global;
import cn.net.ecode.common.service.CrudService;
import cn.net.ecode.modules.sys.dao.SecAdminUserDao;
import cn.net.ecode.modules.sys.dao.UserDao;
import cn.net.ecode.modules.sys.entity.Company;
import cn.net.ecode.modules.sys.entity.Office;
import cn.net.ecode.modules.sys.entity.Role;
import cn.net.ecode.modules.sys.entity.User;
import cn.net.ecode.modules.sys.entity.UserDataScope;
import cn.net.ecode.modules.sys.utils.UserUtils;

/**
 * 二级管理员
 * @author liubaoquan、ThinkGem
 * @version 2015-4-24
 */
@Service
@Transactional(readOnly = true)
public class SecAdminUserService extends CrudService<SecAdminUserDao, User> {

	@Autowired
	private UserDao userDao;
	
	/**
	 * 根据用户查询角色数据
	 * @param userDataScope
	 * @return
	 */
	public List<Role> findUserRoleList(User user){
		return dao.findUserRoleList(user);
	}
	
	/**
	 * 根据用户查询控制权限数据
	 * @param user
	 * @return
	 */
	public List<UserDataScope> findUserDataScopeList(User user){
		return dao.findUserDataScopeList(user);
	}
	
	/**
	 * 根据用户查询控制权限公司数据
	 * @param user 用户参数
	 * @return 
	 */
	public List<Company> findUserDataScopeCompanyList(User user){
		return dao.findUserDataScopeCompanyList(user);
	}

	/**
	 * 根据用户查询控制权限组织数据
	 * @param user 用户参数
	 * @return 
	 */
	public List<Office> findUserDataScopeOfficeList(User user){
		return dao.findUserDataScopeOfficeList(user);
	}

	/**
	 * 保存用户
	 * @param user
	 */
	@Transactional(readOnly = false)
	public void addUser(User user) {
		if (Global.isUseCorpModel()){
			user.setId(user.getCorpCode() + "_" + user.getLoginCode());
		}else{
			user.setId(user.getLoginCode());
		}
		if (UserUtils.get(user.getUserCode()) != null) {
			throw getValidationException("登录账号已经存在");
		}
		user.preInsert();
		user.setUserType(User.USER_TYPE_EMPLOYEE);	//员工
		user.setMgrType(User.MGR_TYPE_SEC_ADMIN);	//二级管理员
		user.setStatus(User.STATUS_NORMAL);			//状态正常
		user.setPassword(UserService.encryptPassword(Global.getConfig("user.initPassword")));//默认密码需从配置文件提取 
		userDao.insert(user);
		// 保存用户授权
		saveAuthorize(user);
		// 清除用户缓存
		UserUtils.clearCache(user);
	}
	
	/**
	 * 编辑用户
	 * @param user
	 */
	@Transactional(readOnly = false)
	public void editUser(User user) {
		user.preUpdate();
		userDao.update(user);
		// 清除用户缓存
		UserUtils.clearCache(user);
	}
	
	/**
	 * 保存管理的用户授权
	 * @param user
	 */
	@Transactional(readOnly = false)
	public void saveAuthorize(User user) {

		// 保存用户角色关联数据
		dao.deleteUserRole(user);
		if (user.getRoleList() != null && user.getRoleList().size() > 0) {
			dao.insertUserRole(user);
		}
		
		// 保存用户数据权限
		dao.deleteUserDataScope(user);
		if (user.getUserDataScopeList() != null && user.getUserDataScopeList().size() > 0) {
			dao.insertUserDataScope(user);
		}
		
		// 清除用户缓存
		UserUtils.clearCache(user);
	}
	
}
